#pragma once

#include "Grid.h"
#include "BoundedSpace.h"
#include "GridFactory.h"
#include "Observer.h"
#include "GridSpace.h"
#include "patch.h"
#include "Vector.h"
#include "mac.h"
#include "RandomHelper.h"
#include "am.h"
#include "CellAgent.h"
#include <vector>
#include <cmath>

namespace LPS
{

	using namespace org::spark::core;
	using namespace org::spark::data;
	using namespace org::spark::space;
	using namespace org::spark::math;

	class LPSmodel 
	{
	public:
		static double LPSEvap;
		static double LPS1stDose;
		static double LPS1stDuration;
		static double LPS1stTime;
		static double LPS2ndDose;
		static double LPS2ndDuration;
		static double LPS2ndTime;
		static double macActLPS;
		static double macActPro;
		static double macRegen;
		static double macAge;
		static double macActDam;
		static double maxProDam;
		static double proDamThresh;
		static double damageEvap;
		static double antiHealThresh;
		static double macAnti;
		static double antiEvap;
		static double proEvap;
		static double macProp;
		static double totalLPS;
		static double proDam;
		static double totalMac;
		static double totalAm;
		static double totalAnti;
		static double totalDamage;
		static double totalPro;
		static Grid *LPS;
		static Grid *pro;
		static Grid *anti;
		static Grid *damage;
		static double step;
		static double time;


		virtual void _init();

		virtual void setup();

		virtual bool begin(long long tick);

		virtual bool end(long long tick);

		virtual void updateSystem();

		virtual void addLPS();


		static double get_LPSEvap();

		static void set_LPSEvap(double value);

		static double get_LPS1stDose();

		static void set_LPS1stDose(double value);

		static double get_LPS1stDuration();

		static void set_LPS1stDuration(double value);

		static double get_LPS1stTime();

		static void set_LPS1stTime(double value);

		static double get_LPS2ndDose();

		static void set_LPS2ndDose(double value);

		static double get_LPS2ndDuration();

		static void set_LPS2ndDuration(double value);

		static double get_LPS2ndTime();

		static void set_LPS2ndTime(double value);

		static double get_macActLPS();

		static void set_macActLPS(double value);

		static double get_macActPro();

		static void set_macActPro(double value);

		static double get_macRegen();

		static void set_macRegen(double value);

		static double get_macAge();

		static void set_macAge(double value);

		static double get_macActDam();

		static void set_macActDam(double value);

		static double get_maxProDam();

		static void set_maxProDam(double value);

		static double get_proDamThresh();

		static void set_proDamThresh(double value);

		static double get_damageEvap();

		static void set_damageEvap(double value);

		static double get_antiHealThresh();

		static void set_antiHealThresh(double value);

		static double get_macAnti();

		static void set_macAnti(double value);

		static double get_antiEvap();

		static void set_antiEvap(double value);

		static double get_proEvap();

		static void set_proEvap(double value);

		static double get_macProp();

		static void set_macProp(double value);

		static double get_totalLPS();

		static void set_totalLPS(double value);

		static double get_proDam();

		static void set_proDam(double value);

		static double get_totalMac();

		static void set_totalMac(double value);

		static double get_totalAm();

		static void set_totalAm(double value);

		static double get_totalAnti();

		static void set_totalAnti(double value);

		static double get_totalDamage();

		static void set_totalDamage(double value);

		static double get_totalPro();

		static void set_totalPro(double value);





		static double get_step();

		static void set_step(double value);

		static double get_time();

		static void set_time(double value);
	};

}
